package edu.zut.lxc.loveime;


import android.content.Context;
import android.content.SharedPreferences;
import android.inputmethodservice.InputMethodService;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;


import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputConnection;
import android.widget.TextView;
import android.widget.Toast;

import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;

import java.util.ArrayList;
import java.util.List;

import edu.zut.lxc.loveime.adapter.SimpleRecyclerAdapter;
import edu.zut.lxc.loveime.constants.Constants;

import edu.zut.lxc.loveime.util.OpenAIAPI;


/**
 * 
 * 类说明: 
 *
 * @author qing
 * @time 31/01/2018 17:59
 */
public class MyInputMethodService extends InputMethodService {
    private RecyclerView mRecyclerView;


    private final static String TAG = "MyInputMethodService";


    private List<String> mListOfApps;

    /**
     * 初始化键盘视图
     *
     * @return
     */
    @Override
    public View onCreateInputView() {

//        constraintLayout = (ConstraintLayout) getLayoutInflater().inflate(R.layout.keyboard_global,null);
        // Add some dummy data

        mListOfApps = new ArrayList<>();
        View view = getLayoutInflater().
                inflate(R.layout.keyboard_global, null);

        String[] title=new String[]{"\uD83D\uDC69\u200D\uD83C\uDFEB知知帮回","\uD83D\uDE0E高情商","\uD83E\uDD2A撩女生","\uD83E\uDD2B幽默","\uD83E\uDDB8\uD83C\uDFFB\u200D♂\uFE0F暖男","\uD83C\uDF80情场高手","\uD83C\uDF81相亲开场","☕暧昧拉扯","\uD83D\uDE0D哄女友",
                "\uD83E\uDD2C暴躁狂","\uD83E\uDDD4温柔大叔","\uD83D\uDCB5霸道总裁","\uD83E\uDD13文艺青年","\uD83E\uDDE7春节祝福","\uD83D\uDE1C逗比","\uD83E\uDD20搞笑四郎","\uD83D\uDE0D年下小奶狗","\uD83E\uDD1C怼一下","\uD83D\uDC4B高情商拒绝","\uD83E\uDD40花式道歉","\uFE0F\u200D\uD83D\uDD25热烈深情","\uD83D\uDC4F夸夸她","\uD83D\uDC51成熟稳重","\uD83C\uDF31温柔体贴"};//定义并初始化保存说明文字的数组
        String[] prompts=new String[]{
                "假如你是一位博学之才，你知道世界上的任何东西、任何问题的答案。当有人问你问题时，你会围绕这个问题进行全面的回复。切记，不要说与问题无关的东西",
                "假如你是一个高情商的人，你需要思考如何利用你的高情商来进行回复。高情商人不会说与问题无关的话。",
                "假如你是一个非常擅长说情话的人，不管你说什么，都会让人觉得浪漫无比。切记，不要说与问题无关的话",
                "假如你是一个幽默的人，你经常使用幽默、讽刺的语气来逗笑你身边的每一个人。切记，不要说与问题无关的话",
                "你是一个暖男，每一个女生都会被你照顾地无微不至。切记，不要说与问题无关的话",
                "假如你是一个久经情场的老手，拥有许多的恋爱经验，并且乐于传授。切记，不要说与问题无关的话",
                "假如你非常会聊天，碰到了相亲的场面你会怎么办呢？思考出一个开场白吧！切记，不要说与问题无关的话",
                "假如你和对方已经到了暧昧期，但还不能戳破那层窗户纸。所以你的每一个回复都抱有成为情侣的目的，但不要表明心意。切记，不要说与问题无关的话",
                "你的女朋友生气了，你要使用浑身解数哄一哄她。切记，不要说与问题无关的话",
                "假如你是一个暴躁狂，无论什么人问你什么问题，你都一概回绝，并且破口大骂",
                "假如你是一个温柔大叔，不光温柔，还有一丝沉稳。切记，不要说与问题无关的话",
                "假如你是一位霸道总裁，你说的每一句话都透露着威严、高冷与傲慢。切记，不要说与问题无关的话",
                "假如你是一位文艺青年，擅长写诗歌，喜欢音乐和风景，脸上总是有一丝丝忧郁。切记，不要说与问题无关的话",
                "新年到了，给大家伙儿送上新年祝福吧！切记，不要说与问题无关的话",
                "假如你是一个非常搞笑的人，周围的人总能被你的每一句话闹得前仰后合。切记，不要说与问题无关的话",
                "假如你是搞笑四郎，你的开场白就是:你好，我是搞笑四郎。你说的每一句话都是有着让人发笑的目的，如果做不到，不如不说。切记，不要说与问题无关的话",
                "你是一位受人喜爱的年轻人，对于比你年长的伴侣充满了热情和关爱。你的温柔和体贴令人心动，而你与年长伴侣之间的互动充满了情趣和甜蜜。切记，不要说与问题无关的话",
                "假如你非常喜欢怼人，并且以善于怼人的个性而闻名。怼人就是你的天职。切记，不要说与问题无关的话",
                "假如你是一个高情商的人，不管对方提什么要求，你都会利用你的高情商拒绝对方。高情商人不会说与问题无关的话。",
                "假如你是一个做了错事的人，不管对方说什么，你总是变着花样道歉。切记，不要说与问题无关的话",
                "假如你是一个乐观且自信的人，往往给人一种热烈且深情的感觉。你说的每一句话都伴有这种感觉。切记，不要说与问题无关的话",
                "假如你的嘴巴很甜，你会根据提示给出适当的夸赞，过分一点也可以。切记，不要说与问题无关的话",
                "假如你是一个成熟稳重的人，你要考虑很多事情，说的每一句话都给人一种成熟稳重的感觉。切记，不要说与问题无关的话",
                "假如你是一个温柔体贴的人，你说的每一句话都应该让人感到温暖。切记，不要说与问题无关的话"};//定义并初始化保存说明文字的数组
        //通过for循环将图片和列表项文字放到Map中，并添加到List集合中
        for(int i=0;i<title.length;i++){
            mListOfApps.add(title[i]);
        }
        //创建SimpleAdapter
        //初始化RecyclerView，设置布局管理器、间距、适配器+、数据等

        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("user_info", Context.MODE_PRIVATE);
        int gridWidth = sharedPreferences.getInt("pagerWidth",MainActivity.width);
            // 1.初始化SimpleRecyclerView
        mRecyclerView =  view.findViewById(R.id.gridView);
        ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) mRecyclerView.getLayoutParams();


        params.width = gridWidth;
        mRecyclerView.setLayoutParams(params);
            // 3.初始化适配器
            SimpleRecyclerAdapter mAdapter = new SimpleRecyclerAdapter(this, mListOfApps);
            // 4.设置布局管理器:瀑布流式
            StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3 , StaggeredGridLayoutManager.HORIZONTAL);

            // 5.根据需要设置间距等其他内容
            mRecyclerView.setLayoutManager(staggeredGridLayoutManager);

        InputConnection ic = getCurrentInputConnection();

        Handler mHandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what){
                    case -2:
                        //
                        //获取到chatgpt返回的内容
                        String content = (String) msg.obj;
                        if (ic!=null) {
                            CharSequence textBeforeCursor = ic.getTextBeforeCursor(1000, 0);
                            int length = textBeforeCursor.length();
                            if (length > 0) {
                                ic.deleteSurroundingText(length, 0);
                            }
                            for (int i = 0; i < content.length(); i++) {
                                char currentChar = content.charAt(i);
                                ic.commitText(String.valueOf(currentChar),1);
                                // 如果当前字符不是空格，等待一段时间（模拟ChatGPT的速度）
                                if (currentChar != ' ') {
                                    try {
                                        Thread.sleep(100);  // 暂停100毫秒
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        }
                        break;
                    default:
                        break;
                }
            }
        };
            mAdapter.setOnItemClickListener(new SimpleRecyclerAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                    Log.e(TAG,"onItemClick: "+position);
                    String content = sharedPreferences.getString(Constants.clipboardContent,"剪切板数据传输失败");
                    if (!content.equals("剪切板数据传输失败")){
                        OpenAIAPI openAIAPI = new OpenAIAPI();
                        openAIAPI.chat(content,prompts[position],mHandler);

                    }else {
                        Toast.makeText(getApplicationContext(),"您还没有复制~",Toast.LENGTH_SHORT);
                    }

                }
            });

            // 6.关联适配器
            mRecyclerView.setAdapter(mAdapter);


        return view;
    }

    @Override
    public View onCreateCandidatesView() {
        TextView textView = new TextView(getBaseContext());
        textView.setText("fdsfdsf");
        return textView;
    }
}



